package com.zsrt.day20170417.pm.pet1;

import com.zsrt.utils.ArrayUtil;

/**
*@author jzh
*@创建时间 2017年4月17日下午3:22:53
*类说明：
*/
public class PetDaoImpl implements PetDao{
	
	/**
	 * 
	 * @param huaren	宠物商店
	 * @param pet       增加的宠物
	 * @return          增加成功，返回true，失败，返回false
	 */
	@Override
	public boolean addPet(PetShop huaren,Pet pet){
		boolean flag=false;
		Pet[] pets = huaren.getPets();
		int count=0;
		for(int index=0;index<pets.length;index++){
			Pet pet1=pets[index];
			if(pet1!=null){
				count++;
			}else{
				break;
			}
		}
		if(count>=10){
			System.out.println("笼子已满");
		}else{
			pets[count]=pet;
			flag=true;
		}	
		return flag;
	}
	
	/**
	 * 
	 * @param huaren	宠物商店
	 * @param name      宠物的名字
	 * @return          找到，返回该宠物
	 */
	@Override
	public Pet findPetByName(PetShop huaren, String name) {
		
		Pet[] pets = huaren.getPets();
		for(int index=0;index<pets.length;index++){
			Pet pet=pets[index];
			String mingZi=pet.getName();
			if(mingZi.equals(name)){
				return pets[index];
			}
		}
		return null;
	}
	
	
	/**
	 * 查找年年龄符合标准的宠物	
	 * @param huaren	宠物商店	
	 * @param age       年龄
	 * @return          符合标准的数组
	 */
	@Override
	public Pet[] findPetByAge(PetShop huaren, int age) {
		Pet[] pets = huaren.getPets();
		int count=0;
		for(Pet pet:pets){
			//判断是不是null，在null上调用方法，会报空指针异常
			if(pet!=null){
				int nl=pet.getAge();
				if(nl==age){
					count++;
				}
			}
		}
		Pet[] newPets=new Pet[count];
		count=0;
		for(Pet pet:pets){
			if(pet!=null){
				int nl=pet.getAge();
				if(nl==age){
					newPets[count]=pet;
					count++;
				}
			}
		}
		return newPets;
	}
	
	
	/**
	 * 更改年龄
	 * @param huaren	宠物商店
	 * @param pet       宠物
	 * @param age       年龄
	 * @return          返回更改后的宠物
	 */
	@Override
	public Pet updateAge(PetShop huaren, Pet pet, int age) {
		Pet[] pets = huaren.getPets();
		String name = pet.getName();
		Pet newPet = findPetByName(huaren, name);
		if(newPet!=null){
			newPet.setAge(age);
			return newPet;
		}
		return null;
	}
	/**
	 * 删除单个宠物
	 * @param huaren	宠物商店
	 * @param name      宠物名字
	 * @return          删除后的数组
	 */
	@Override
	public Pet[] deleteByName(PetShop huaren, String name) {
		Pet[] pets = huaren.getPets();
		Pet[] newPets=new Pet[pets.length-1];
		Pet newPet = findPetByName(huaren, name);
		if(newPet!=null){
			for(int index=0;index<pets.length;index++){
				Pet newPet1=pets[index];
				String mingZi=newPet1.getName();
				if(mingZi.equals(name)){
					for(int i=0;i<index;i++){
						newPets[i]=pets[i];
					}
					for(int i=index+1;i<pets.length;i++){
						newPets[i-1]=pets[i];
					}
					break;
				}
			}
		}
		
		return newPets;
	}
	/**
	 * 批量删除
	 * @param huaren	宠物商店
	 * @param pets      要删除的宠物数组
	 * @return          删除后的数组
	 */
	@Override
	public Pet[] deleteByNames(PetShop huaren, Pet[] pets) {
		//得到原数组pets1
		Pet[] pets1 = huaren.getPets();
		int count=0;
		//遍历两个数组，找到要删除的元素个数count
		for(int index=0;index<pets.length;index++){
			String name=pets[index].getName();
			for(int i=0;i<pets1.length;i++){
				String name1=pets1[i].getName();
				if(name.equals(name1)){
					count++;
				}
			}
		}
		//把要删除的宠物放到数组delPets中
		Pet[] delPets=new Pet[count];
		System.out.println(delPets.length);
		int c=0;
		for(int index=0;index<pets.length;index++){
			String name=pets[index].getName();
			for(int i=0;i<pets1.length;i++){
				String name1=pets1[i].getName();
				if(name.equals(name1)){
					delPets[c++]=pets[index];
				}
			}
		}
		//ArrayUtil.printArray(delPets);
		//删除后的数组长度是pets1.length-count
		Pet[] targetPets=new Pet[pets1.length-count];
		count=0;
		int number=0;
		for(int index=0;index<pets1.length;index++){
			String name=pets1[index].getName();
			for(int i=0;i<delPets.length;i++){
				String name1=delPets[i].getName();
				if(name.equals(name1)){
					count=0;
					break;
					
				}else{
					count++;
				}
			}
			if(count!=0){
				targetPets[number++]=pets1[index];
			}
		}
		return targetPets;
	}
	/**
	 * 根据不同的条件更改宠物的属性
	 * @param huaren		宠物商店
	 * @param conditions	不同的情况，定义为一个pet对象
	 * @param after			更改后的数组
	 * @return
	 */
	@Override
	public Pet[] updateAgeByName(PetShop huaren, Pet[] conditions, Pet[] after) {
		
		Pet[] pets = huaren.getPets();
		int count=0;
		for(int i=0;i<pets.length;i++){
			String mingZi=pets[i].getName();
			int nianLing=pets[i].getAge();
			String yanSe=pets[i].getColor();
			for(int j=0;j<conditions.length;j++){
				String name=conditions[j].getName();
				int age=conditions[j].getAge();
				String color=conditions[j].getColor();
				if(mingZi!=null){
					if(!mingZi.equals(name)){
						
						if(nianLing==age){
							if(yanSe.equals(color)){
								
							}
						}
					}
				}
				
			}
		}
		
		
		return null;
	}
	
	
	
	

}
